/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package geradordao;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;

/**
 *
 * @author Iana
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws IOException {
        // TODO code application logic here
        BufferedReader br = new BufferedReader(new FileReader(new File("tabelas.sql")));

        AnalisadorLexico analisadorLexico = new AnalisadorLexico(br);
        analisadorLexico.analisar();

        if (analisadorLexico.temErros()) {
            System.out.println("ERROS LÉXICOS: ");
            analisadorLexico.mostraErros();
            System.exit(0);
        } else {

            AnalisadorSintatico analisadorSintatico = new AnalisadorSintatico(analisadorLexico.getTokens());
            analisadorSintatico.analisar();

            //TabelaSimbolos.mostraSimbolos();

            if (analisadorSintatico.temErros()) {
                System.out.println("Erros Sintáticos: ");
                analisadorSintatico.mostraErros();
                System.exit(0);
            }
            ASRPGArvore sintaticoGeradorArvore = new ASRPGArvore(analisadorLexico.getTokens());
            sintaticoGeradorArvore.analisar();
            if (sintaticoGeradorArvore.temErros()) {
                System.out.println("Erros Sintaticos Arvore");
                System.exit(0);
            } //else {
            //System.out.println("Analisador Sintaticos Arvore reconheceu!");
            //sintaticoGeradorArvore.mostraArvore();
            //}
            AnalisadorSemantico analisadorSemantico = new AnalisadorSemantico(sintaticoGeradorArvore.getRaiz());
            analisadorSemantico.analisar();
            if (analisadorSemantico.temErros()) {
                System.out.println("Erros Semânticos: ");
                analisadorSemantico.printErros();
                System.exit(0);
            }
            TabelaSimbolos.mostraSimbolos();
            GeradorCodigo gerador = new GeradorCodigo(sintaticoGeradorArvore.getRaiz());
            gerador.gerar();

            //ChaveEstrangeira.mostraChaves();
        }
    }
}
